#ifndef DB_H    
#define DB_H 

#include "muduo/base/Logging.h"

#include <mysql/mysql.h>
#include <string>
#include <cstdint>    // for uint64_t

// 数据库操作类
class MySQL
{
public:
    // 初始化数据库连接
    MySQL();
    // 释放数据库连接资源
    ~MySQL();
    // 连接数据库
    bool connect();
    // 断开数据库连接
    void disconnect();
    // 更新操作
    bool update(const std::string& sql);
    // 获取插入操作后生成的主键
    uint64_t getLastInsertId();
    // 查询操作
    MYSQL_RES * query(std::string sql);
    // 获取连接句柄
    MYSQL * getConnection();
    //获取最近发生的错误信息
    unsigned int getErrorCode() const;

    // 预处理语句相关的方法
    MYSQL_STMT* prepare(const std::string& sql); // 准备SQL语句
    bool bindParam(MYSQL_BIND *param);           // 绑定参数
    bool bindParam(MYSQL_BIND *params, unsigned int paramCount);   //绑定参数
    bool execute();                              // 执行预处理语句
    bool closeStmt();
    bool bindResult(MYSQL_BIND *result);         // 绑定结果集
    bool fetch();                                // 获取结果
private:
    MYSQL * _conn;
    MYSQL_STMT *_stmt;    // 保存预处理语句对象
    
    // 禁止复制构造函数和赋值操作符
    MySQL(const MySQL&) = delete;
    MySQL& operator=(const MySQL&) = delete;
};

#endif